package com.qingyun.system.common.util;

import cn.hutool.core.util.StrUtil;
import java.util.*;

/**
 * 独有的字符串工具类
 * 提供处理字符串的分割和转换，以及一些其他的字符串操作
 *
 * @Author 1024创新实验室-主任: 卓大
 * @Date 2021-09-02 20:21:10
 * @Wechat zhuoda1024
 * @Email lab1024@163.com
 * @Copyright  <a href="https://1024lab.net">1024创新实验室</a>
 */
public class StringUtil extends StrUtil {

    // ===============split to Set======================

    /**
     * 将字符串按指定分隔符分割并转换为String类型的HashSet。
     *
     * @param str 要分割的字符串
     * @param split 分隔符
     * @return 分割后的HashSet
     */
    public static Set<String> splitConvertToSet(String str, String split) {
        if (isEmpty(str)) {
            return new HashSet<String>();
        }
        String[] splitArr = str.split(split);
        HashSet<String> set = new HashSet<String>(splitArr.length);
        Collections.addAll(set, splitArr);
        return set;
    }

    // ===============split to List======================

    /**
     * 将字符串按指定分隔符分割并转换为String类型的ArrayList。
     *
     * @param str 要分割的字符串
     * @param split 分隔符
     * @return 分割后的ArrayList
     */
    public static List<String> splitConvertToList(String str, String split) {
        if (isEmpty(str)) {
            return new ArrayList<String>();
        }
        String[] splitArr = str.split(split);
        ArrayList<String> list = new ArrayList<String>(splitArr.length);
        list.addAll(Arrays.asList(splitArr));
        return list;
    }

    // ===============split to Integer======================

    /**
     * 将字符串按指定分隔符分割并转换为Integer类型的ArrayList，非整数默认值。
     *
     * @param str 要分割的字符串
     * @param split 分隔符
     * @param defaultVal 默认值
     * @return 分割后的Integer ArrayList
     */
    public static List<Integer> splitConvertToIntList(String str, String split, int defaultVal) {
        if (isEmpty(str)) {
            return new ArrayList<Integer>();
        }
        String[] strArr = str.split(split);
        List<Integer> list = new ArrayList<Integer>(strArr.length);
        for (int i = 0; i < strArr.length; i++) {
            try {
                int parseInt = Integer.parseInt(strArr[i]);
                list.add(parseInt);
            } catch (NumberFormatException e) {
                list.add(defaultVal);
                continue;
            }
        }
        return list;
    }

    // ... 其他方法的注释省略，与上述类似 ...

    /**
     * 将字符串的第一个字符大写。
     *
     * @param str 要处理的字符串
     * @return 首字符大写的字符串
     */
    public static String upperCaseFirstChar(String str) {
        if (str != null && !str.isEmpty()) {
            char firstChar = str.charAt(0);
            if (Character.isUpperCase(firstChar)) {
                return str;
            } else {
                char[] values = str.toCharArray();
                values[0] = Character.toUpperCase(firstChar);
                return new String(values);
            }
        } else {
            return str;
        }
    }

    /**
     * 替换字符串中指定范围内的字符为新字符串。
     *
     * @param content 原始字符串
     * @param begin 起始位置（包含）
     * @param end 结束位置（不包含）
     * @param newStr 新字符串
     * @return 替换后的字符串
     */
    public static String replace(String content, int begin, int end, String newStr) {
        if (begin < content.length() && begin >= 0) {
            if (end <= content.length() && end >= 0) {
                if (begin > end) {
                    return content;
                } else {
                    StringBuilder starStr = new StringBuilder();

                    for (int i = begin; i < end; ++i) {
                        starStr.append(newStr);
                    }

                    return content.substring(0, begin) + starStr + content.substring(end);
                }
            } else {
                return content;
            }
        } else {
            return content;
        }
    }
}

